package com.example.demo.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
public class RateLimiter {

    private static final String RATE_LIMIT_KEY_PREFIX = "chat:rate_limit:";

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    // 检查是否超过频率限制
    //简单的速率限制检查功能
    public boolean checkRateLimit(String userId) {
        //RATE_LIMIT_KEY_PREFIX区分不同类型的速率限制键
        String key = RATE_LIMIT_KEY_PREFIX + userId;
        //对Redis键Key进行递增操作，
        Long count = redisTemplate.opsForValue().increment(key);
        if (count == null) {//键不存在
            count = 1L;//将计数初始化为1
        }
        //设置过期时间，Redis键Key过期时间为1分钟，意味着每分钟都会重新计数
        redisTemplate.expire(key, 1, TimeUnit.MINUTES);
        //每分钟30条
        return count <= 30; // 每分钟30条
    }
}